import java.util.concurrent.TimeUnit;

/**
 * 回答多线程的 8 个问题：
 * 1. 先访问短信，再访问邮件，先打印短信还是邮件
 * 2. 停 4 秒在短信方法内，先打印短信还是邮件
 * 3. 先访问短信，再访问 hello 方法，是先打短信还是 hello
 * 4. 现在有两部手机，第一部发短信，第二部发邮件，先打印短信还是邮件
 * 5. 两个静态同步方法，1 部手机，先打印短信还是邮件
 * 6. 两个静态同步方法，2 部手机，先打印短信还是邮件
 * 7. 1 个静态同步方法，1 个普通同步方法，1 部手机，先打印短信还是邮件
 * 8. 1 个静态同步方法，1 个普通同步方法，2 部手机，先打印短信还是邮件
 */

public class Lock8Demo {
    public static void main(String[] args) {
//        Phone phone1 = new Phone();
//        Phone phone2 = new Phone();
        Phone phone = new Phone();

        new Thread(()->{
            // phone.sendEmail();
            // 调用静态方法，直接通过类名调用，跟 phone 对象是否存在压根无关
            Phone.sendEmail();
        },"t1").start();

        new Thread(()->{
            phone.sendSMS();
        },"t2").start();

//        new Thread(()->{
//            phone.hello();
//        },"t3").start();
    }
}

class Phone{
    public static synchronized void sendEmail() {
        // 暂停毫秒，先让发邮箱这个操作睡 5 秒
        try {TimeUnit.MILLISECONDS.sleep(5000);} catch (InterruptedException e) { e.printStackTrace();};
        System.out.println("---Email");
    }

    public synchronized void sendSMS() {
        System.out.println("---SMS");
    }

//    public void hello() {
//        System.out.println("---hello");
//    }
}
